home *** CD-ROM | disk | FTP | other *** search
/ Internet Surfer 2.0 / Internet Surfer 2.0 (Wayzata Technology) (1996).iso / pc / text / mac / faqs.059 < prev    next >
Text File  |  1996-02-12  |  29KB  |  577 lines

  1. Frequently Asked Questions (FAQS);faqs.059
  2.  
  3.  
  4.  
  5. (7) I hear this talk about "+" channels, but I don't see any. What were
  6. they?
  7.  
  8.     "+" channels were in older server versions. They no longer
  9. exist, and probably will stay dead in later code revisions.
  10.  
  11. (8) What are good channels to try while using irc?
  12.  
  13.     #hottub and #initgame are almost always teeming with people.
  14. #hottub is meant to simulate a hot tub, and #initgame is non-stop game
  15. of "inits" (initials). Just join and find out!
  16.     Many irc operators are in #Twilight_Zone ... so if you join
  17. that channel and don't hear much talking, don't worry, it's not because
  18. you joined, operators don't talk much on that channel anyways!
  19.  
  20. (9) How can I find out more about how + and # channels have changed?
  21.  
  22.     ftp to cs.bu.edu and look at irc/irc-2.7.CHANGES
  23.  
  24. (10) What if someone tells me to type something cryptic?
  25.  
  26.     Never type anything anyone tells you to without knowing what it
  27. is. There is a problem with typing a certain command with the ircII
  28. client that gives anyone immediate control of your client (and thus can
  29. alter your account environment also).
  30.  
  31. (11) What is NickServ? What if I can't remember my NickServ password?
  32.  
  33.     To quote from NickServ's help text, NickServ's purpose is to
  34. keep unique nicknames on irc. NickServ sends a warning to anyone else
  35. who signs on with your nickname.  If you don't use IRC for 10 weeks,
  36. your nickname expires for reuse.
  37.  
  38.     Only a NickServ operator can change your nickserv password.
  39. To find out which NickServ operators are online, send
  40. /msg NickServ@service.de OPERWHO
  41.  
  42. Nicknames with a "*" next to them are online at the time.
  43.  
  44. (12) What is IPCLUB? GIF-Archives of IRC-persons?
  45.  
  46.         IPCLUB stands for IRC Picture Club. It is an E-Mail service
  47. provided by tommi@phoenix.oulu.fi for all the users of the Internet. For
  48. more help, mail tommi@phoenix.oulu.fi with the subject of "IPCLUB/HELP".
  49.  
  50. (13) Where can I learn more?
  51.  
  52.     A good place to start might be downloading the irc tutorials.
  53. They're avaliable via anonymous ftp from cs.bu.edu in
  54. /irc/support/tutorial.* .. You can also join various IRC related mailing
  55. lists. "operlist" is a list that discusses current (and past) server
  56. code, routing, and protocol. You can join by mailing
  57. operlist-request@eff.org. You can join the irchat mailing list by
  58. mailing irchat-request@cc.tut.fi. There is a low traffic ircII mailing
  59. list, mail dl2p+@andrew.cmu.edu to be added. Another mailing list,
  60. ircd-three@eff.org, exists to discuss protocol revisions for the 3.0
  61. release of the ircd, currently in planning. Mail
  62. ircd-three-request@eff.org to be added to that.
  63.  
  64. (13) What do I do if I'm still confused or have additions to this posting?
  65.  
  66.     email hrose@eff.org or ask for help (in #Twilight_Zone) on irc.
  67.  
  68. --
  69. Helen Trillian Rose                 <hrose@eff.org, hrose@kei.com>
  70. Electronic Frontier Foundation       email eff@eff.org for EFF Info
  71. Kapor Enterprises, Inc.                 Flames to:
  72. Systems and Networks Administration    women-not-to-be-messed-with@eff.org
  73. Xref: bloom-picayune.mit.edu news.newusers.questions:11845 news.software.readers:3026 news.answers:4746
  74. Path: bloom-picayune.mit.edu!enterpoop.mit.edu!hri.com!spool.mu.edu!darwin.sura.net!haven.umd.edu!umd5!syrinx.umd.edu!phillips
  75. From: phillips@syrinx.umd.edu (Leanne Phillips)
  76. Newsgroups: news.newusers.questions,news.software.readers,news.answers
  77. Subject: rn KILL file FAQ
  78. Message-ID: <killfile.faq_724990397@syrinx.umd.edu>
  79. Date: 22 Dec 92 02:13:24 GMT
  80. Expires: 21 Jan 93 14:13:17 GMT
  81. Sender: news@umd5.umd.edu
  82. Reply-To: phillips@syrinx.umd.edu
  83. Followup-To: news.newusers.questions
  84. Organization: University of Maryland, College Park
  85. Lines: 183
  86. Approved: news-answers-request@mit.edu
  87. Supersedes: <killfile.faq_722373878@syrinx.umd.edu>
  88. Originator: phillips@syrinx.umd.edu
  89.  
  90. Archive-name: killfile-faq
  91. Last modified: 23 Oct 1992
  92.  
  93. Send comments, suggestions, corrections to phillips@syrinx.umd.edu.
  94.  
  95.   Rn and trn, and other varieties of rn, have a very useful feature called
  96. the KILL file, which allows you to kill (skip over) articles that you don't
  97. want to see.  There is some support for killfiles in xrn, but the support is
  98. limited; nothing in here is guaranteed to work for xrn.  See the xrn
  99. man page.
  100.  
  101.   KILL files come in two forms:
  102.     Global: In your News directory, you will have the file KILL.
  103.     Local: In your News directory, the killfile for group foo.bar
  104.         will be foo/bar/KILL.
  105. The difference between the two is that there can be one killfile for
  106. each group (the local killfile), and that killfile affects only the
  107. particular newsgroup (foo/bar/KILL affects only foo.bar; baz/quex/KILL
  108. affects only baz.quex, etc).  The global killfile affects all newsgroups.
  109. (There's a way to change the default names of the killfiles, but it's
  110. more complicated than I want to get into here.  See the rn(1) man page.)
  111.  
  112.   Killfiles allow you to kill articles based on a number of criteria:
  113. a subject line, a general subject, articles from one poster, articles
  114. from one site, articles cross-posted from any other group, or from one
  115. other group in particular, and articles that are follow-ups to anything at
  116. all (that is, anything with the Re: in the subject line).  You can also
  117. kill articles with a particular string anywhere in the article.
  118.  
  119.   This article assumes you know how to use an editor and that you have
  120. created the directories for any local killfiles you may need.  Remember
  121. that the name of the file is KILL, not kill or Kill; caps are important.
  122.  
  123.   The general style for building a kill line is:
  124.  
  125.         /pattern/modifiers:command
  126.  
  127. Now, that is obviously not useful to know without understanding it.  The
  128. modifiers and commands are all explained in the rn man page, but here are
  129. some useful ones:
  130.     Modifiers:
  131.        a: all, look through the entire article for the pattern
  132.        h: look through the header of the article for the pattern
  133.     Commands:
  134.        m   mark as unread
  135.        j   mark as read
  136.        =   show subject line
  137. If no modifier appears before the colon, only the subject line of the
  138. article is searched.  More than one command can be performed by using
  139. the style:
  140.  
  141.         /pattern/modifier:command:command
  142. Thus, for instance, you can use j and = together to see the exact subject
  143. lines being killed.
  144.   It doesn't matter if you use uppercase or lowercase in the pattern; the
  145. program will assume they're the same thing.  That is, "Test" and "test"
  146. used in the pattern mean exactly the same thing; only one is necessary.
  147. If you want case to matter, see the rn(1) man page, the 'c' modifier.
  148.  
  149.   The easiest way to kill a subject line is to kill it from within the
  150. newsgroup.  When the subject line comes up that you want to kill, instead
  151. of using 'n' to skip that article or 'k' to kill the subject for that
  152. session, type 'K'.  The subject line will then be entered into your KILL
  153. file for that group.  If you want to put that line into your global KILL
  154. file, you'll have to do that yourself.  (If you don't need it in your global
  155. file, it's best not to put it there - global kill files slow down your news
  156. reading a lot.  So does using the 'a' modifier; use it sparingly.)
  157.   (I should mention here the easiest way to start editing your kill files.
  158. Typing control-k when you're being asked to pick a newsgroup to read will
  159. start you editing the global killfile; typing the same thing when you're
  160. reading a newsgroup will start up the editing with the kill file for that
  161. group.  If it doesn't exist, it will create it - including the directories
  162. necessary.  This method is particularly recommended for people creating their
  163. first kill file.)
  164.  
  165.   To kill a general subject, ie any 'test' messages, put in the pattern:
  166.             /test/:j
  167. This will kill anything with the word 'test' in the subject line.
  168.  
  169.   To kill anything that is a followup to any article, use this pattern:
  170.             /.*Re:/:j
  171. This kills anything beginning with Re:.
  172.  
  173.   To kill cross-posts from one particular group, say foo.bar, try this:
  174.  
  175.         /Newsgroups:.*[ ,]foo\.bar/h:j
  176.  
  177. This searches the header (the 'h' modifier) for any line containing the
  178. string 'Newsgroups:' (which all articles do), as well as the string
  179. 'foo.bar'.  The other elements of this line are part of the regular
  180. expression meta-language; see the ed(1) man page for more details.
  181. (Note that all of them are necessary, particularly the '\' before the
  182. '.' in foo\.bar.)
  183.  
  184.   To kill all cross-posts, from any group at all:
  185.  
  186.         /Newsgroups:.*,/h:j
  187.  
  188. If the Newsgroups: line has a ',' in it, it's a cross-post, and therefore
  189. this will find it.
  190.   Note that the above line searches the entire header, included the
  191. Subject: line, for that pattern.  So a Subject line like:
  192.         Subject: I hate the Newsgroups: line, don't you?
  193. would get killed by that pattern, because it has a 'Newsgroups:' part, and
  194. a ','.  To make it work properly, use the 'start of line' character, ^.
  195. The ^ isn't actually there when you look at the header yourself; it just
  196. means to look for the beginning of the line.  So, to kill cross-posts:
  197.  
  198.         /^Newsgroups:.*,/h:j
  199.  
  200. should be used instead.  (Use of the ^ is recommended if you know the
  201. pattern you want to catch will be at the beginning of the line; it makes
  202. searching a lot faster.)
  203.  
  204.   To kill articles from a single poster, you need to know the userid and
  205. nodename of the poster; for this example we'll use noone@anywhere.all.
  206.  
  207.         /From: *noone@anywhere\.all/h:j
  208.  
  209.   For articles from a particular site, just remove the 'noone' from the
  210. previous line, and articles from the machine 'anywhere.all' will be killed.
  211. (Note again that the \ is important.)
  212.  
  213.   Now, after all that, you might suddenly find out that you killed articles
  214. from someone whose posts you want to read even if they write about subjects
  215. you don't want to read.  For that, you need to 'unkill' the articles by
  216. them:
  217.        /From: *name of person you want to read/h:m
  218. So, if you suddenly decided you wanted to read noone@anywhere.all's
  219. postings, after having deleted them above, you would add this line:
  220.  
  221.         /From: *noone@anywhere\.all/h:m
  222.  
  223. The 'm' becomes useful suddenly.  You can substitute m for j any time
  224. you need to, up above.  In fact, you can kill everything in a newsgroup and
  225. only read what you want to read by using the 'm' feature, and putting this
  226. line at the top of your KILL file:
  227.  
  228.                 /^/:j
  229.   This method has a problem, though.  Specifically, it marks even those
  230. you've already read (really read, not just marked as read) as unread.  So,
  231. there's another way to do it:
  232.             /pattern/:=:M
  233. (check the rn(1) man page for the M command).  This lists all the subjects
  234. of the new articles, and then gives those articles to the M command.  (You
  235. then have to type 'Y' after the M command has finished.)  (For more complete
  236. information, please write me, and I'll forward on to you an example that was
  237. posted by David Tamkin.)
  238.  
  239.   Finally, you can kill (or mark, of course) a particular pattern appearing
  240. anywhere in the article, as opposed to just the Subject: line or the header:
  241.  
  242.             /pattern/a:j
  243.                and
  244.             /pattern/a:m
  245.  
  246. This is useful for, for instance, killing all articles by a certain user,
  247. followups to said user's articles, and even mention of the user by userid
  248. and node, or, conversely, by marking all of those conversations as unread
  249. so you can read them if they've been killed accidentally by your other
  250. entries.
  251.  
  252.   Further information is available in the rn man page, particularly on
  253. other available commands and modifiers.  Regular expression syntax is
  254. in the ed(1) man page; the xrn man page gives information about the quirks
  255. of xrn in relation to killfiles.
  256.  
  257.   I'd like to thank Jonathan Kamens and Rich Salz in particular for their
  258. help, and everyone else who's sent in comments, criticisms, and suggestions;
  259. keep them coming, folks!
  260.  
  261. Minor administrative note to the suggestors: Several people have suggested
  262. that, in junking all of the articles and then marking only the desirable
  263. ones to read, you need to use the 'r' modifier (search read articles as
  264. well as unread).  According to the man page I read, you don't need that;
  265. if 'm' is the first command, the 'r' is assumed.  If anyone wants to test
  266. this and tell me it's wrong, please do.  But please only tell me if it's
  267. wrong; I'll assume it's right until someone tells me otherwise. :-)
  268.  
  269. Leanne Phillips
  270. "Go not unto the Elves for counsel, for they will say both yea and nay."
  271. "Now is _not_ a good time, Keiko!" - Worf, "Disaster"
  272. "Variety is the spice of life, and I don't want to die." - Scott Borst
  273. Xref: bloom-picayune.mit.edu news.answers:4542 sci.math.num-analysis:6341
  274. Path: bloom-picayune.mit.edu!enterpoop.mit.edu!news.media.mit.edu!micro-heart-of-gold.mit.edu!rutgers!sun-barr!cs.utexas.edu!uunet!timbuk.cray.com!walter.cray.com!jwg
  275. From: jwg@cray.com (John W. Gregory)
  276. Newsgroups: news.answers,sci.math.num-analysis
  277. Subject: Linear Programming FAQ
  278. Summary: A List of Frequently Asked Questions about Linear Programming
  279. Keywords: FAQ, LP, Linear Programming
  280. Message-ID: <linear-programming-faq-1-724103080@cray.com>
  281. Date: 11 Dec 92 19:44:49 GMT
  282. Expires: 02/14/93
  283. Reply-To: jwg@cray.com (John W. Gregory)
  284. Followup-To: sci.math.num-analysis
  285. Organization: Cray Research, Inc., Eagan MN USA
  286. Lines: 707
  287. Approved: news-answers-request@MIT.Edu
  288. Originator: jwg@ceres
  289. Nntp-Posting-Host: ceres.cray.com
  290.  
  291. Posted-By: auto-faq 2.4
  292. Archive-name: linear-programming-faq
  293. Last-modified: 1992/12/11
  294.  
  295.  
  296.            Linear Programming - Frequently Asked Questions List
  297.                                  (lp_faq)
  298.                    Most recent update: December 11, 1992
  299.  
  300. --------------------------------------------------------------------------
  301.  
  302. 0.  "What's in this FAQ?"
  303.  
  304. A:  Table of Contents
  305.     0.  "What's in this FAQ?"  (Oh no! Is this a recursion?)
  306.     1.  "What is Linear Programming?"
  307.     2.  "Where is there a good code, preferably public domain, to solve
  308.          Linear Programming problems?"
  309.     3.  "Oh, and we also want to solve it as an integer program. I think
  310.          there will be only a few thousand variables or so."
  311.     4.  "I've written my own optimization code.  Where are some test models?"
  312.     5.  "What is MPS format?"
  313.     6.  "What software is there for non-linear optimization?"
  314.     7.  "What references are there in this field?"
  315.     8.  "Just a quick question..."
  316.     9.  "Who maintains this FAQ list?"
  317.  
  318. --------------------------------------------------------------------------
  319.  
  320. 1.  "What is Linear Programming?"
  321.  
  322. A:  A linear program (LP) is a problem that can be put into the form
  323.  
  324.     minimize   cx
  325.     subject to Ax=b
  326.                 x>=0
  327.  
  328. where x is a vector to be solved for, A is a matrix of known coefficients,
  329. and c and b are vectors  of known coefficients.  All these entities must
  330. have consistent dimensions, of course, and you can add "transpose" symbols
  331. to taste.  The matrix A is generally not square, hence you don't solve an
  332. LP by just inverting A.  Usually A has more columns than rows, so  Ax=b
  333. is therefore underdetermined, leaving great latitude in the choice of x
  334. with which to minimize cx.
  335.  
  336. Other formulations can be used in this framework.  For instance, if you
  337. want to maximize instead of minimize, multiply the c vector by -1.  If
  338. you have constraints that are inequalities rather than equations, you
  339. can introduce one new variable (a "slack") for each inequality and treat
  340. the augmented row of the matrix as an equation.  LP codes will often
  341. take care of such "bookkeeping" for you.
  342.  
  343. LP problems are usually solved by a technique known as the Simplex Method,
  344. developed in the 1940's and after.  Briefly stated, this method works by
  345. taking a sequence of square submatrices of A and solving for x, in such a
  346. way that successive solutions always improve, until a point is reached
  347. where improvement is no longer possible.  A family of LP algorithms known
  348. as Interior Point methods has been developed starting in the 1980's, that
  349. can be faster for many (but so far not all) problems.  Such methods are
  350. characterized by constructing a sequence of trial solutions that go
  351. through the interior of the solution space, in contrast to the Simplex
  352. Method which stays on the boundary and examines only the corners (vertices).
  353.  
  354. LP has a variety of uses, in such areas as petroleum, finance, transportation,
  355. forestry, and military.
  356.  
  357. The word "Programming" is used here in the sense of "planning"; the
  358. necessary relationship to computer programming was incidental to the
  359. choice of name.  Hence the phrase "LP program" to refer to a piece of
  360. software is not a redundancy, although I tend to use the term "code"
  361. instead to avoid the possible ambiguity.
  362.  
  363. --------------------------------------------------------------------------
  364.  
  365. 2.  "Where is there a good code, preferably public domain, to solve
  366. Linear Programming problems?"
  367.  
  368. A:  It depends on the difficulty of your models.  LP technology and
  369. computer technology have both made such great leaps that models that
  370. were previously considered "large" are now routinely solved.  Nowadays,
  371. with good commercial software, models with a few thousand constraints
  372. and several thousand variables can be tackled with a PC.  Workstations
  373. can often handle models with variables in the tens of thousands, or even
  374. greater.  It's hard to be specific about sizes and speed, a priori, due
  375. to the wide variation in things like model structure and variation in
  376. factorizing the basis matrices.
  377.  
  378. There is a recently released public domain code, written in C, called
  379. "lp_solve" that is available on Usenet in the "comp.sources.reviewed"
  380. newsgroup.  Its author (Michel Berkelaar, email at michel@es.ele.tue.nl)
  381. claims to have solved models with up to 30,000 variables and 50,000
  382. constraints.  My own experience with this code is not quite so uniformly
  383. optimistic (new users of LP are sometimes shocked to learn that just
  384. because a given code has solved a model of a given dimension, it may not
  385. be able to solve all models of the same size).  Still, for someone who
  386. isn't sure just what kind of LP code is needed, it represents a very
  387. reasonable first try, and the price is certainly right.  The code is
  388. archived at anonymous ftp site "ftp.uu.net", in directory
  389.     "/usenet/comp.sources.reviewed/volume02/lp_solve".
  390. It consists of three files, part00.Z, part01.Z and part02.Z.  You should
  391. download them in binary mode, and use the `uncompress` utility to expand
  392. them to normal ASCII format.  The file called part00 contains reviewers'
  393. comments, and the other two files can be unpacked by removing the first
  394. 9 lines and executing the files as shell scripts (e.g., `sh part01`).
  395. Then follow the instructions in the README and INSTALL files.
  396.  
  397. For DOS/PC users, Prof. Timo Salmi at the University of Vaasa in Finland
  398. offers a code called "tslin".  You should be able to access it by ftp at
  399. garbo.uwasa.fi in directory /pc/ts (the current file name is tslin33b.zip,
  400. apparently using ZIP compression), or else I suggest contacting Prof.
  401. Salmi at ts@uwasa.fi.
  402.  
  403. The consensus is that the LP code published in Numerical Recipes is not at
  404. all strong, and should be avoided for heavy-duty use.  If your requirement
  405. is for a solver that can handle 100-variable models, it might be okay.
  406.  
  407. There is an ACM TOMS routine for LP, #552, available from the netlib server,
  408. in directory /netlib/toms.  See the section on test models for detail on
  409. how to use this server.
  410.  
  411. If you have access to one of the commercial math libraries, such as IMSL or
  412. NAG, you may be able to use an LP routine from there.
  413.  
  414. If your models prove to be too difficult for free software to handle,
  415. then you can consider acquiring a commercial LP code.  There are dozens
  416. of such codes on the market. I have my own opinions, but for reasons of
  417. space, generality and fairness, I will not attempt even to list the codes
  418. I know of here.  Instead I refer you to the annual survey of LP software
  419. published in "OR/MS Today", a joint publication of ORSA (Operations
  420. Research Society of America) and TIMS (The Institute of Management
  421. Science).  I think it's likely that you can find a copy of the June, 1992
  422. issue, either through a library, or by contacting a member of these two
  423. organizations (most universities probably have several members among the
  424. faculty and student body).  The survey lists almost fifty actively marketed
  425. products.  This publication also carries advertisements for many of these
  426. products, which may give you additional information to help make a decision.
  427.  
  428. There are many considerations in selecting an LP code.  Speed is important,
  429. but LP is complex enough that different codes go faster on different models;
  430. you won't find a "Consumer Reports" article  8v)  to say with certainty which
  431. code is THE fastest.  I usually suggest getting benchmark results for your
  432. particular type of model if speed is paramount to you.  Benchmarking may
  433. also help determine whether a given code has sufficient numerical stability
  434. for your kind of models.
  435.  
  436. Other questions you should answer: Can you use a stand-alone code, or do
  437. you need a code that can be used as a callable library, or do you require
  438. source code?  Do you want the flexibility of a code that runs on many
  439. platforms and/or operating systems, or do you want code that's tuned to
  440. your particular hardware architecture (in which case your hardware vendor
  441. may have suggestions)?  Is the choice of algorithm (Simplex, Interior
  442. Point) important to you?  Do you need an interface to a spreadsheet
  443. code?  Is the purchase price an overriding concern?  Is the software
  444. offered at an academic discount (assuming you are at a university)?  How
  445. much hotline support do you think you'll need?
  446.  
  447. It may not always be true that "you get what you pay for," but it is rare
  448. that you get more than you pay for.  8v)   There is usually a large
  449. difference in LP codes, in performance (speed, numerical stability,
  450. adaptability to computer architectures) and features, as you climb the
  451. price scale.  If a code seems overpriced to you, you may not yet
  452. understand all of its features.
  453.  
  454. --------------------------------------------------------------------------
  455.  
  456. 3.  "Oh, and we also want to solve it as an integer program. I think
  457. there will be only a few thousand variables or so."
  458.  
  459. A:  Hmmmm.  You want
  460.     - Nontrivial model size
  461.     - Integer solutions
  462.     - Public domain code
  463. Pick one or maybe two of the above.  You can't have all three.  8v)
  464.  
  465. Integer LP models are ones where the answers must not take fractional
  466. values.  It may not be obvious that this is a VERY much harder problem
  467. than ordinary LP, but it is nonetheless true.  The buzzword is "NP-
  468. Completeness", the definition of which is beyond the scope of this
  469. document but means in essence that in the worst case the amount of
  470. time to solve a family of related problems goes up exponentially
  471. as the size of the problem grows.
  472.  
  473. Integer models may be ones where only some of the variables are to be
  474. integer and others may be real-valued (termed "Mixed Integer LP" or
  475. MILP, or "Mixed Integer Programming" or MIP), or they may be ones where
  476. all the variables must be integral (termed "Integer LP" or ILP).  The
  477. class of ILP is often further subdivided into problems where the only
  478. legal values are {0,1} ("Binary" or "Zero-One" ILP), and general integer
  479. problems.  For the sake of generality, the Integer LP problem will be
  480. referred to here as MIP, since the other classes can be viewed as special
  481. cases of MIP.
  482.  
  483. You should be prepared to solve far smaller MIP models than the
  484. corresponding LP model, given a certain amount of time you wish to
  485. allow (unless you and your model happen to be very lucky). There exist
  486. models that are considered challenging, with mere hundreds of variables.
  487. Conversely, some models with tens of thousands of variables solve
  488. readily.  It all depends, and the best explanations of "why" always
  489. seem to happen after the fact.  8v)
  490.  
  491. One exception to this gloomy outlook is that there are certain models
  492. whose LP solution always turns out to be integer.  Best known of these
  493. are the so-called Transportation Problem, Assignment Problem, and
  494. Network-Flow Problem.  It turns out that these problems are best solved
  495. by specialized routines that take major shortcuts in the Simplex Method,
  496. and as a result are relatively quick running.  See the section on
  497. references for a book by Kennington and Helgason, which contains some
  498. source code for Netflo.  Netflo is available by anonymous ftp at
  499. dimacs.rutgers.edu, in directory /pub/netflow/mincost/solver-1, but
  500. I don't know the copyright situation (I used to think you had to buy
  501. the book to get the code).
  502.  
  503. People are sometimes surprised to learn that MIP problems are solved
  504. using floating point arithmetic.  Although various algorithms for MIP
  505. have been studied, most if not all available general purpose large-scale
  506. LP codes use a method called "Branch and Bound" to try to find an optimal
  507. solution.  In a nutshell, B&B solves MIP by solving a sequence of related
  508. LP models.  Good codes for MIP distinguish themselves more by solving
  509. shorter sequences of LP's, than by solving the individual LP's faster.
  510. Even moreso than with regular LP, a costly commercial code may prove its
  511. value to you if your MIP model is difficult.
  512.  
  513. As a point of interest, the Simplex Method currently retains an advantage
  514. over the newer Interior Point methods for solving these sequences of LP's.
  515.  
  516. The public domain code "lp_solve", mentioned earlier, accepts MIP models,
  517. as do a large proportion of the commercial LP codes in the OR/MS Today
  518. survey.  I have seen mention made of algorithm 333 in the Collected
  519. Algorithms from CACM, though I'd be surprised if it was robust enough
  520. to solve large models.
  521.  
  522. The better MIP codes have numerous parameters and options to give the user
  523. control over the solution strategy. Most have the capability of stopping
  524. before an optimum is proved, printing the best answer obtained so far.
  525. For many MIP models, stopping early is a practical necessity. Fortunately,
  526. a solution that has been proved by the algorithm to be within, say, 1% of
  527. optimality often turns out to be the true optimum, and the bulk of the
  528. computation time is spent proving the optimality. For many modeling
  529. situations, a near-optimal solution is acceptable anyway.
  530.  
  531. Once one accepts that large MIP models are not typically solved to a
  532. proved optimal solution, that opens up a broad area of approximate
  533. methods, probabilistic methods and heuristics, as well as modifications
  534. to B&B.  Claims have been made for Genetic Algorithms and Simulated
  535. Annealing, though (IMHO) these successes have been problem dependent
  536. and difficult to generalize.  (A reference for GA is David Goldberg,
  537. "Genetic Algorithms in Machine Learning.")
  538.  
  539. Whatever the solution method you choose, when trying to solve a difficult
  540. MIP model, it is usually crucial to understand the workings of the physical
  541. system (or whatever) you are modeling, and try to find some insight that
  542. will assist your chosen algorithm to work better.  A related observation
  543. is that the way you formulate your model can be as important as the actual
  544. choice of solver.  You should consider getting some assistance if this
  545. is your first time trying to solve a large (>100 variable) problem.
  546.  
  547. --------------------------------------------------------------------------
  548.  
  549. 4.  "I've written my own optimization code.  Where are some test models?"
  550.  
  551. A:  In light of the comments above, I hope your aims are fairly modest,
  552. for there are already a lot of good codes out there.  I hope your LP
  553. code makes use of sparse matrix techniques, rather than using a tableau
  554. form of the Simplex method, because the latter usually ends up being
  555. numerically unstable and very slow.
  556.  
  557. If you want to try out your code on some real-world LP models, there is
  558. a very nice collection of small-to-medium-size ones on netlib.  If you
  559. have ftp access, you can try "ftp research.att.com", using "netlib"
  560. as the Name, and your email address as the password. Do a "cd lp/data"
  561. and look around. There should be a "readme" file, which you would
  562. want to look at first.  Alternatively, you can reach an e-mail
  563. server via "netlib@ornl.gov", to which you can send a message saying
  564. "send index from lp/data"; follow the instructions you receive.
  565.  
  566. The Netlib LP files (after you uncompress them) are in a format called
  567. MPS, which is described in another section of this document.
  568.  
  569. There is a collection of MIP models, housed at Rice University.  Send
  570. an email message containing "send catalog" to softlib@rice.edu, to get
  571. started.
  572.  
  573. There is a collection of network-flow codes and models at DIMACS (Rutgers
  574. University).  Use anonymous FTP at dimacs.rutgers.edu.  Start looking in
  575. /pub/netflow.  Another network generator is called NETGEN and is available
  576. on netlib (lp/generators).
  577.